perm filename TSERVO.FAI[VV,BGB] blob sn#133449 filedate 1974-12-02 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY TSERVO, CALPOT, CALSTP,CALLEN, NXTLEN, CALSER
C00004 00003	COUNTERS
C00006 00004		OPDEF LAC[MOVE]↔OPDEF DAC[MOVEM]↔OPDEF GO[JRST]
C00009 00005			AFTER GETTING RATIO WITH REFERENCE
C00012 00006		LAC 11,LENS		MIGHT BE CHANGED BY PDP10
C00015 00007	SERVO CONTROL ROUTINES
C00016 ENDMK
C⊗;
ENTRY TSERVO, CALPOT, CALSTP,CALLEN, NXTLEN, CALSER
	TITLE TSERVO ROUTINE

	STAT←17		;STATUS AC
	RELAY←16	;NEW RELAY BITS AC
	OREL←15		;OLD RELAY BITS AC

;REGISTERS AVAILABLE TO USER
	STATUS↑: 0		;STATUS BITS
	LENS↑:	0		;LENS NUMBER (-1 TO CHANGE TO NEXT LENS)
	P1↑:0↔	P2↑:0↔	P3↑:0	;LATEST POT READINGS - FOCUS,TILT,PAN.
	CREF↑:	0		;REFERENCE VOLTAGE
	L1:0↔	L2:0↔	L3:0	;FINAL POT VALUES
	E1:40↔	E2:100↔	E3:100	;TOLERENCES

;REGISTERS FOR INTERNAL USE ONLY
	X1:0↔	X2:0↔	X3:0	;PREVIOUS POT READINGS

;RELAY BITS FOR INCREASING AND DEPOT READINGS
UP:	1B22 ↔ 1B19 ↔ 1B20	;INCREASE POT: FOCUS FAR - TILT DOWN - PAN LEFT (CCW).
DOWN:	1B23 ↔ 1B18 ↔ 1B21	;DECREASE POT: FOCUS NEAR - TILT UP - PAN RIGHT (CW).
TEST:	3B23 ↔ 3B19 ↔ 3B21	;RELAY BITS: FOCUS - TILT - PAN.
;COUNTERS
	LCTR:	0	;LENS COUNT
	FCTR:	0	;FOCUS COUNT
	TCTR:	0	;TILT COUNT
	PCTR:	0	;PAN COUNT
	GCTR:	0	;GENERAL COUNT
	DCTR:	0	;LENS DELAY COUNT
	LBITS:	0	;LAST RELAY BITS
	LLENS:	0	;LAST LENS NUMBER SEEN

;COUNTER MAXIMUMS;
	DEL:	200	;COUNTER FOR HUNG A-D
	MISSD:	25	;DATA MISSED COUNT
	CNTR:	=120 ↔ =40 ↔ =40   ;SERVO STOP COUNTER MAX: FOCUS,TILT,PAN.
	WCNTR:	=100	;LENS DELAY COUNTER
	LCNTR:	=240	;LENS STOP MAX
	GCNTR:	=2200	;GENERAL COUNTER MAX

;BITS IN STATUS WORD
	DONE←←1		;ALL ACTIONS COMPLETED (OR ERROR OCCURED)
	RUN←←2		;TSERVO RUNNING
	READ←←4		;POT READ REQUEST
	SERVO←←10	;POT SERVO REQUEST
	XXLENS←←20	;LENS CHANGE REQUEST
	LREAD←←40	;LENS READ REQUEST
	MISS←←100	;DATA MISSED ERROR
	ADH←←200	;AD HUNG ERROR
	LHANG←←400	;LENS TIMED OUT ERROR
	FHANG←←1000	;FOCUS   "
	THANG←←2000	;TILT	 "
	PHANG←←4000	;PAN     "
	GHANG←←10000	;GENERAL "
	CONFL←←100000	;CONFLICT FLAG
	NCONF←←200000	;CONFLICT THIS TICK - INTERNAL FLAG ONLY
	LRUN←←400000	;LENS RUN BIT -         "      "     "

SHANG:	FHANG ↔ THANG ↔ PHANG

	XLENS←←4000	;LENS RELAY BIT
	AD←←424		;AD DEVICE NUMBER
	DATA←←204	;136 DEVICE NUMBER
	MISC←←700	;KLUDGE BAY DEVICE NUMBER
	TUR←←600	;LENS INPUT DEVICE NUMBER
	REL←←40		;RELAY REGISTER SELECT
	OPDEF LAC[MOVE]↔OPDEF DAC[MOVEM]↔OPDEF GO[JRST]
;START OF SPACE WAR CODE.
TSERVO:	LAC STAT,STATUS↔LAC OREL,LBITS	;LOAD REGISTERS.
	SETZM RELAY			;CLEAR NEW RELAY BITS
	DAC 3,SAVE3#			;SAVE TICK COUNTER
	IORI STAT,RUN			;SET RUN BIT
	TRNE STAT,DONE↔GO COUT		;DONE BIT SET - IDLE UNTIL STOPPED
	TRZ STAT,MISS!ADH!GHANG!LHANG!PHANG!THANG!FHANG!NCONF
					;CLEAR ERROR BITS
	AOS 1,GCTR			;INDEX GENERAL COUNT
	CAMLE 1,GCNTR
	GO [	IORI STAT,GHANG		;SPW GENERAL TIME OUT ERROR
		GO DOUT]
	TRNN STAT,READ!SERVO↔GO NOPOT	;NO POT READING OR SERVOING REQUESTED
FOO:	CONI DATA,4			;CHECK FOR CONFLICTS
	ANDI 4,7
	JUMPN 4,[IORI STAT,CONFL!NCONF
		GO NOPOT]
	LAC 11,[IOWD 3,5]		;IOWD TO STORE READINGS
	LAC 4,MISSD			;SET DATA MISSED COUNT
TURNON:	CONO DATA,4250			;TURN ON 136
	CONO AD,172030			;TURN ON A-D
LL1:	LAC 3,DEL			;SET DEVICE HUNG COUNT
	CONSO DATA,1000			;WAIT FOR 136 DONE
	SOJGE 3,.-1			;AND COUNT DOWN
	JUMPL 3,[IORI STAT,ADH		;HUNG AD, SET ERROR BIT
		CONO AD,4000↔GO DOUT]	;AND TURN OFF
	CONSZ DATA,10000		;TEST FOR DATA MISSED
	GO [	CONO AD,4000
		SOJG 4,[		;AND COUNT DOWN
			MOVEI 3,12
LL2:			SOJGE 3,LL2
			GO TURNON]
		IORI STAT,MISS		;LIMIT REACHED - SET ERROR BIT
		CONO AD,4000		;MISSED - TURN OFF
		GO DOUT]
	BLKI DATA,11			;READ IN POTS
	SKIPA↔GO LL1
	CONO AD,4000			;STOP A-D
	ASH 7,-=24		;UNPACK REFERENCE
	LAC 10,7↔FSC 10,233
	ASHC 5,-=24		;UNPACK AND STORE READINGS
	LSH 6,1↔ASHC 6,-=24
		;AFTER GETTING RATIO WITH REFERENCE
	LSH 7,1↔ASH 7,-=24
	FSC 5,233↔FSC 6,233↔FSC 7,233
	FDVR 5,10↔FDVR 6,10↔FDVR 7,10
	LAC 11,[XWD 5,P1]↔BLT 11,CREF
	TRNN STAT,SERVO↔GO NOPOT↔MOVEI 1,2	;NO POT SERVO REQUESTED
LOOP:	LAC 2,P1(1)↔FSBR 2,L1(1)		;DIFFERENCE WITH FINAL READING
	TDNN OREL,TEST(1)↔GO NOMOT		;TEST IF THIS MOTOR WAS ON
	LAC 3,P1(1)↔FSBR 3,X1(1)↔MOVMS 3	;YES - DIFFERENCE WITH LAST READING
	FMPR 3,CREF↔FSBR 3,E1(1)↔JUMPLE 3,.+4	;TEST ACTUAL READING FOR DO DACENT.
	SETOM FCTR(1)↔LAC 3,P1(1)↔DAC 3,X1(1)	;MOVING? CLR CNT AND UPDATE LAST READING
	AOS 3,FCTR(1)				;INCREMENT
	CAMLE 3,CNTR(1)				;AND TEST FOR MAX
	GO[IOR STAT,SHANG(1)↔GO DOUT]		;SET HUNG BITS FOR PROPER MOTOR
NOMOT:	MOVM 3,2↔FMPR 3,CREF↔SUB 3,E1(1)	;TEST FOR NEAR FINAL READING
	JUMPGE 3,[SKIPL 2↔ IOR RELAY,UP(1)	;NO - SET RELAY BITS
	 SKIPGE 2↔IOR RELAY,DOWN(1)↔GO .+1]
	SOJGE 1,LOOP				;AND RETURN FOR NEXT READING
	TRNN RELAY,770000
	TRZ STAT,SERVO				;CLEAR SERVO REQUEST BIT IF DONE
NOPOT:	TRNN STAT,XXLENS!LREAD↔GO OUT		;NO LENS CHANGE OR READING REQUESTED
	CONI TUR,10↔LSH 10,-=13↔ANDI 10,3	;WHICH LENS IS UP
	TRNN STAT,XXLENS↔GO[DAC 10,LENS↔GO OUT]	;READ ONLY ? STORE AND EXIT.
	LAC 11,LENS		;MIGHT BE CHANGED BY PDP10
	SKIPGE 11↔LAC 11,LENTAB(10)	;FIRST TIME THROUGH AND NEXT LENS WANTED
	ANDI 11,3↔DAC 11,LENS		;MAKE SURE HONEST OR WE LOOP
	CAMN 10,LENS		;REQUESTED LENS IS UP
	GO [	AOS 12,DCTR	;YES - INCREMENT DELAY COUNT
		CAML 12,WCNTR	;AND TEST FOR END OF WAIT
		TRZ STAT,LENS!LRUN↔GO OUT]	;YES - CLEAR LENS CHANGE BIT
	CAMN 10,LLENS↔GO [			;SAME LENS ?
	  AOS 1,LCTR↔CAMGE 1,LCNTR↔GO .+3	;HUNG COUNT.
	  IORI STAT,LHANG↔GO DOUT]		;LENS HUNG.
	DAC 10,LLENS		;LENS CHANGED - UPDATE
	SETZM LCTR		;AND CLEAR COUNT
	IORI RELAY,XLENS		;SET RELAY BIT FOR LENS MOTOR
	IORI STAT,LRUN			;AND STATUS BIT
OUT:	TRNN RELAY,XLENS!770000		;TEST FOR ANY RELAY BITS ON
	GO[TRNE STAT,NCONF!LRUN↔GO .+1	;OR CONFLICT BIT SET FOR THIS TICK
		GO DOUT]	;NONE - WE ARE FINISHED
	SKIPL SAVE3↔GO AOUT	;CHECK TICK COUNT
	GO BOUT			;TURN OFF MOTOR - WE ARE GOING TO BE SHUFFLED

;EXITS FROM SERVO ROUTINE

DOUT:	ORI STAT,DONE		;DONE EXIT - OK OR ERROR
	TRZ STAT,LRUN		;CLEAR INTERNAL BITS
COUT:	SETZM LCTR		;EXIT WHEN IDLING
	LAC 1,[XWD LCTR,LCTR+1];CLEAR COUNTERS, ETC
	BLT 1,LLENS
BOUT:	SETZM RELAY↔SETZM FCTR		;SHUFFLE EXIT - TURN OFF ALL MOTORS
	SETZM PCTR↔SETZM TCTR
AOUT:	DAC RELAY,LBITS		;NORMAL EXIT - STORE RELAY BITS
	TRZ STAT,NCONF		;CLEAR MORE INTERNAL BITS
	DAC STAT,STATUS		;STORE STATUS
	CONO MISC,REL(RELAY)	;SET RELAY REGISTER TO START MOTORS
	DISMIS

LENTAB:	OCT 1,3,2,0		;LENS NUMBER TABLE
;SERVO CONTROL ROUTINES

CALSER:	SKIPN CALFLG#			;READ POTS FIRST TIME
	SKIPA 1,[READ]			;SERVO TO INITIAL POSITION THEREAFTER
	MOVEI 1,SERVO↔DAC 1,STATUS
	PUSH 17,[.+2]↔GO SPWRUN

	SKIPE CALFLG↔POPJ 17,
	LAC 1,[XWD P1,L1]↔BLT 1,L3
	SETOM CALFLG
	POPJ 17,

NXTLEN:	MOVEI 1,XXLENS↔SETOM LENS↔GO SPWRUN-1	;NEXT LENS ROUTINE.
CALPOT:	MOVEI 1,READ↔GO SPWRUN-1		;READ POTS
CALLEN:	SKIPA 1,[LREAD]				;READ LENS
CALSTP:	MOVEI 1,DONE↔DAC 1,STATUS		;STOP MOTORS
SPWRUN:	SPCWAR 0,636367↔SPCWAR 1,TSERVO
	SETCM 1,STATUS
	TRNE 1,DONE!RUN↔GO .-2
	SPCWAR 0,636367↔POPJ 17,

END